#ifndef NATIAVWIDGET_H
#define NATIAVWIDGET_H

#include "common.h"
#include "antivirus/antiviruswork.h"
#include "devcommon_global.h"

#include <QWidget>
#include <QLabel>
#include <QGSettings>
#include <QFileDialog>

#include <QFrame>
//#include <DSpinner>
#include <QLabel>
#include <QPushButton>
//#include <DSwitchButton>
#include <QCommandLinkButton>
//#include <DGuiApplicationHelper>
#include "widgets/hswitchbutton.h"

class QVBoxLayout;
class QHBoxLayout;
class QLabel;
class QPushButton;
QT_END_NAMESPACE


class AntiVirusWork;
class NatiavScanLog;
class NatiavTrustDialog;
class NatiavIsolationDilog;
class UpdateDialog;
class CustomPushbutton;
class DSpinner;

//病毒查杀类型
enum NatiavScanType {
    Default = -1,
    AllKilling, //全盘查杀
    QuickKilling, //快速查杀
    CustomKilling //自定义查杀
};

/*
@classname:(NatiavWidget)
@author：(mxz)
@discptions:(病毒查杀主页面)
@hirts:(继承)
@datatime:(04-28)
*/

class DEVCOMMONSHARED_EXPORT NatiavWidget : public QWidget
{
    Q_OBJECT
public:
    explicit NatiavWidget(AntiVirusWork *work, QWidget *parent = nullptr);

    //展现日志页面
    Q_SLOT void showScanLog();
    //展现信任
    Q_SLOT void showScanTrust();
    //展现隔离
    Q_SLOT void showIsolation();
    //展现白名单
    Q_SLOT void showScanWhitelist();
    //展现定时扫描
    void showScheduleScanSetting();
    //展示USB扫描设置界面
    void showUSBScanSetting();

    //展现自定义扫描
    void showCustomScan();

    //提示弹框
    void showUpdateTip();
    // 展现提示窗口
    void showTipDialog();
    //设置因主题改变图标
    void setIconByThemeChange();

    // 更新信任的数据
    Q_SLOT void updateTrustAreaSize(int size);
    // 更新隔离区的数据
    Q_SLOT void updateIsolationAreaSize(int size);

    // 安恒/瑞星图标点击跳转应用商店
    void jumpToAppStore();

private:
    //初始化界面
    void initGUI();
    //中间布局
    QHBoxLayout *initCenter();
    //下面按钮布局
    QVBoxLayout *initBottom();
    //标题布局
    QVBoxLayout *initTitle();
    //中间布局的三种模式触发
    Q_SLOT void displayCenteridget(const QModelIndex &nIndex);
    Q_SLOT void displayCenteridget(int nIndex);

    // 检查更新按钮转圈
    void updataCheckingWaiting();

    // 事件过滤
    bool eventFilter(QObject *obj, QEvent *event);

    // 初始化链接
    void initConnect();

    // 字体变化时，实时调整文案显示
    void refreshScanLogElideText(); // 扫描日志
    void refreshIsolationElideText(const QString &size); // 隔离区
    void refreshTrustAreaElideText(const QString &size); // 信任区
    void refreshTopPanelElideText(const QString &strMsg);//头部区域

Q_SIGNALS:
    //请求展现扫描子页面    类型 （0 全盘 ，1快速 ，2自定义 ）
    void onNotifyShowScan(int ntype, QString sPath, QString sVersion);
    //查询出的信任文件   文件内容会给信任区域展现
    void onNotifyQueryTrustFile(QList<TrustFileInfo> sInfos);
    //查询出隔离文件    文件内容会给隔离区页面展现
    void onNotifyQueryIsolationFile(QList<TrustFileInfo> sPaths);

public Q_SLOTS:
    //信任文件查询的结果
    void doQueryTrustFile(QList<TrustFileInfo> sPaths);
    //隔离文件查询结果
    void doQueryIsolationFile(QList<TrustFileInfo> sPaths);
    //移除隔离文件
    void doRemoveIsolationFile(QString sPath);
    //移除信任文件
    void doRemoveTrustFile(QString sPath);
    // 主题类型改变
    void themeTypeChange(ColorType themeType);

    // 更新界面
    void updateUI();
    // 确认更新病毒库
    void confirmUpdateVdb();

    // 更新版本号
    void updateVersionUI(const QString sVersion);

    // 检查更新/更新按钮点击槽
    void updateButtonClicked();

    // USB自动扫描
    void usbAutoScan(bool isChecked);

    void CnterViewClearFocus();
private:
    NatiavScanLog *m_logDialog; // 查询日志页面
    NatiavTrustDialog *m_trustDialog; // 信任区域页面
    NatiavIsolationDilog *m_isolationDialog; // 隔离区域页面
    QLabel *m_timeLable; // 更新时间
    QLabel* m_titleLable;//标题
    QLabel *m_version; // 病毒库版本
    QCommandLinkButton *m_updateBtn;
    bool m_isbVdbUpdating; // 正在更新
    QString m_sLocalVdbVersion; // 本地病毒库版本
    QString m_sSrvVdbVersion; // 服务器病毒库版本
    QString m_strLastUpdateTime;//上次更新记录
    DSpinner *m_spinner; // 加载控件
//    DGuiApplicationHelper *m_guiHelper; // 方便得到系统主题
    bool m_updateFialFlag; // 更新是失败的标志
    AntiVirusWork *m_antivirusWork; // 病毒服务work
    QLabel *m_enginIcon; // 引擎图标
    QLabel *m_enginLable; // 引擎文字
    CustomPushbutton *m_scanLogButton; // 扫描日志
    CustomPushbutton *m_isolationButton; // 隔离区
    CustomPushbutton *m_trustAreaButton; // 信任区
    CustomPushbutton *m_scanWhitelistButton; // 扫描白名单
    bool m_isolationflag; // 隔离区数量查询
    bool m_truestFlag; // 信任区数量查询
    int m_isolationSize; // 隔离区数量
    int m_trustSize; // 信任区数量
    QLabel *m_scheduleScanLabel; //定时扫描标签
    QLabel *m_usbAutoScanLabel; //USB自动扫描标签
    HSwitchButton *m_usbAutoScanButton; //USB自动扫描按钮
    DBusInvokerInterface *m_hmiScreen; // 主界面服务
    SettingsInvokerInterface *m_gsetting; // 安全中心gsetting配置
};

#endif // NATIAVWIDGET_H
